package com.xiaoke.java2;

/**
 * 解析调用中非虚方法、虚方法的测试
 *
 * @author xiaoke
 * @Date 2022/1/12 15:59
 */

class Father{
    public Father() {
        System.out.println("Father的构造器");
    }
    public static void showStatic(String str){
        System.out.println("father" + str);
    }

    public final void showFinal(){
        System.out.println("father show final");
    }
    public void showCommon(){
        System.out.println("father 普通方法");
    }
}





public class Son extends Father {

    public Son() {
        //invokespecial
        super();
    }

    public  Son(int age){
        //invokespecial
        this();
    }
    //不是重写父类的静态方法，因为静态方法不能被重写
    public static void showStatic(String str){
        System.out.println("son" + str);
    }

    private void showPrivate(String str){
        System.out.println("son private"+str);
    }

    public void show(){
        // invokestatic
        showStatic("xiaoke.com");
        //invokestatic
        super.showStatic("good!");
        //invokespecial
        showPrivate("hello");
        //invokespecial
        super.showCommon();

        //invokevirtual
        showFinal();//因为此方法声明有final，不能被子类重写，所以认为此方法是非虚方法

        //invokevirtual
        showCommon();
        //invokespecial
        info();

        MethodInterface in = null;
        //invokeinterface
        in.methodA();
    }

    private void info() {
    }

    public static void main(String[] args) {
        Son son = new Son();
        son.show();
    }

}

interface MethodInterface{
    void methodA();
}